package com.lizemin.decorate.util;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.web.util.HtmlUtils;

import java.util.HashMap;

/**
 * @author lzm
 * @date 2025/10/6 14:52
 * @description
 */
public class JSON {

    /**
     * 将Java对象转换为JSON字符串
     *
     * @param object 要转换的Java对象
     * @return 转换后的JSON字符串
     */
    public static String toJSONString(Object object) {
        try {
            return new ObjectMapper().writeValueAsString(object);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 解析JSON字符串为指定的Java对象
     *
     * @param jsonString JSON字符串
     * @param clazz      目标Java对象的Class类型
     * @param <T>        目标Java对象的类型
     * @return 解析后的Java对象
     */
    public static <T> T parseObject(String jsonString, Class<T> clazz) {
        try {
            return new ObjectMapper().readValue(jsonString, clazz);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 获取转义后的JSON字符串
     *
     * @param content 原始JSON字符串
     * @return 转义后的JSON字符串
     */
    @SuppressWarnings("all")
    public static String getEscapedJson(String content) {
        HashMap map = JSON.parseObject(content, HashMap.class);
        map.forEach((key, value) -> {
            if (value instanceof String val) {
                map.put(key, HtmlUtils.htmlEscape(val));
            }
        });
        String escapedJson = JSON.toJSONString(map);
        return escapedJson;
    }

}
